package thired.class11_digui;

public class Class01_Hanoi {
    public static void hanoi1(int n){
        leftToRight(n);
    }

    public static void leftToRight(int n){
        if (n == 1) { // base case
            System.out.println("Move 1 from left to right");
            return;
        }
        leftToMid(n - 1);
        System.out.println("Move " + n + " from left to right");
        midToRight(n - 1);
    }

    public static void leftToMid(int n){
        if(n == 1){
            System.out.println("Move 1 from left to mid");
            return;
        }
        leftToRight(n - 1);
        System.out.println("Move " + n + " from left to mid");
        rightToMid(n -1);
    }

    public static void midToRight(int n){
        if(n == 1){
            System.out.println("Move 1 from mid to right");
            return;
        }
        midToLeft(n - 1);
        System.out.println("Move " + n + " from mid to right");
        leftToRight(n - 1);
    }
    public static void rightToMid(int n){
        if(n == 1){
            System.out.println("Move 1 from right to mid");
            return;
        }
        rightToLeft(n - 1);
        System.out.println("Move " + n + " from right to mid");
        leftToMid(n -1);
    }

    public static void midToLeft(int n){
        if(n == 1){
            System.out.println("Move 1 from mid to left");
            return;
        }
        midToRight(n - 1);
        System.out.println("Move " + n + " from mid to left");
        rightToLeft(n -1);
    }

    public static void rightToLeft(int n){
        if(n == 1){
            System.out.println("Move 1 from right to left");
            return;
        }
        rightToMid(n - 1);
        System.out.println("Move " + n + " from right to left");
        midToLeft(n -1);
    }


    public static void process(int n,String from,String to,String other){
        if(n == 1){
            System.out.println("Move 1 from " + from + " to " + to);
            return;
        }
        process(n -1 ,from,other,to);
        System.out.println("Move " + n + " from " + from + " to " + to);
        process(n - 1,other,to,from);
    }

    public static void hanoi2(int n){
        process(n,"left","right","mid");
    }

    public static void main(String[] args) {
        int n = 3;
        hanoi1(n);
        System.out.println("============");
        hanoi2(n);
//        System.out.println("============");
//        hanoi3(n);
    }
}
